﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using InterfazPublica;
using _5deOro.Interfaz;
using System.Windows.Forms;
using System.Xml;

namespace _5deOro.Dominio
{
    public class Juego5deOro : IJuegos
    {
        private string nombre = "5 de Oro";

        private IngresoNumeros formIngresoNumeros;

        public Juego5deOro() {

            this.formIngresoNumeros = new IngresoNumeros();
        }

        public XmlDocument RealizarApuesta(IJuegos j)
        {
            IngresoNumeros ingresoNumeros = (IngresoNumeros)j.CargarFormulario();

            string datosFormulario = ingresoNumeros.ObtenerApuesta();

            XmlDocument xml = new XmlDocument();

            if (ingresoNumeros.EsValidaApuesta()) //Chequea si es valida la apuesta
            {

                //Hago la llamada al WebService para Generar la apuesta y devuelve un string con los datos
                ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();

                string retornoApuesta = cliente.GenerarApuesta(datosFormulario);

                string[] datosFormularioParsed = datosFormulario.Split(';');
                string numerosApostados = datosFormularioParsed[0];
                string revancha = datosFormularioParsed[1];
                string montoApostado = datosFormularioParsed[2];

                XmlNode Apuestas = xml.CreateNode(XmlNodeType.Element, "Apuestas", null);
                XmlNode Apuesta = xml.CreateNode(XmlNodeType.Element, "Apuesta", null);

                XmlAttribute _idApuesta = xml.CreateAttribute("IdApuesta");
                _idApuesta.Value = retornoApuesta;
                XmlAttribute _valoresApostados = xml.CreateAttribute("Valores");
                _valoresApostados.Value = numerosApostados;
                XmlAttribute _revancha = xml.CreateAttribute("Revancha");
                _revancha.Value = revancha;
                XmlAttribute _monto = xml.CreateAttribute("Monto");
                _monto.Value = montoApostado;

                Apuesta.Attributes.Append(_idApuesta);
                Apuesta.Attributes.Append(_valoresApostados);
                Apuesta.Attributes.Append(_revancha);
                Apuesta.Attributes.Append(_monto);
                Apuestas.AppendChild(Apuesta);

                xml.AppendChild(Apuestas);

                ingresoNumeros.LimpiarFormulario();
            }
            else 
            {
                xml = null;
            }
            
            return (xml);
        }

        public double CorrespondePremio(Guid idApuesta)
        {
            ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();
            double premio = cliente.CorrespondePremio(idApuesta);
            
            return premio;
        }

        public bool EfectuarPago(Guid idApuesta)
        {
            ServiceReference2.Service1Client cliente = new ServiceReference2.Service1Client();
            bool retorno = cliente.EfectuarPago(idApuesta);

            return retorno;
        }

        public Form CargarFormulario()
        {
            return this.formIngresoNumeros;
        }

        public string GetNombre() 
        {
            return this.nombre;
        }

        public static int ValidarIngresos(List<int> numeros, int numero) 
        {
            int retorno = 0;
            if (numero > 44 || numero < 1) { retorno = 1; }
            if (numeros.Exists(o => o==numero)) { retorno = 2; }
            return retorno;
        }
    }
}
